When native window requests button presses request other button related events
authorAlexander Larsson <alexl@redhat.com>
Wed, 20 Jan 2010 14:37:16 +0000 (15:37 +0100)
committerTristan Van Berkom <tristan.van.berkom@gmail.com>
Sun, 4 Apr 2010 00:55:22 +0000 (20:55 -0400)
We need to do this because otherwise the implicit button grab for this
(native) window will not deliver the button events not selected for
by this window. This is a problem because non-native child windows may
select using a wider event mask, and we can't emulate these events if we
don't get the native events.

Fixes bug #607508

gdk/gdkwindow.c

index 4510ddd47e9b5a9206916ed22373bc778ba8f451..046dae927537ff5da98870e0597e8b747e0789a4 100644 (file)
@@ -1215,8 +1215,15 @@ get_native_event_mask (GdkWindowObject *private)
        * important thing, because in X only one client can do
        * so, and we don't want to unexpectedly prevent another
        * client from doing it.
+       *
+       * We also need to do the same if the app selects for button presses
+       * because then we will get implicit grabs for this window, and the
+       * event mask used for that grab is based on the rest of the mask
+       * for the window, but we might need more events than this window
+       * lists due to some non-native child window.
        */
-      if (gdk_window_is_toplevel (private))
+      if (gdk_window_is_toplevel (private) ||
+         mask & GDK_BUTTON_PRESS_MASK)
        mask |=
          GDK_POINTER_MOTION_MASK |
          GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK |